home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 42 / Amiga Format AFCD42 (Issue 126, Aug 1999).iso / -serious- / programming / amos / mazer / bigmazer.amos / bigmazer.amosSourceCode < prev    next >
AMOS Source Code  |  1999-05-17  |  2KB  |  112 lines

  1. 'This program creates mazes! 
  2. '
  3. Dim MAZE(16,9),FLAGS(16,9)
  4. For B=0 To 9
  5.    For A=0 To 16
  6.       FLAGS(A,B)=15
  7.    Next 
  8. Next 
  9. For A=0 To 16
  10.    Add FLAGS(A,0),-1 : Rem No N exit on N row 
  11.    Add FLAGS(A,9),-4 : Rem No S exit on S row 
  12.    If A<10
  13.       Add FLAGS(16,A),-2 : Rem No E exit on E row 
  14.       Add FLAGS(0,A),-8 : Rem No W exit on W row 
  15.    End If 
  16. Next 
  17. Dim DIX(3),DIY(3)
  18. DIY(0)=-1 : DIX(1)=1 : DIY(2)=1 : DIX(3)=-1
  19. '
  20. 'Here we go... 
  21. '
  22. FIRST=True : Randomize Timer
  23. GO1:
  24. '
  25. Ink 0 : Rem Every time to draw maze! 
  26. If FIRST
  27.    Curs Off : Hide On : Paper 2 : Cls : No Mask 
  28. Else 
  29.    For A=0 To 16 : For B=0 To 9 : MAZE(A,B)=0 : Next : Next 
  30. End If 
  31. '
  32. For A=0 To 323 Step 19
  33.    Draw A,0 To A,190 : If A<199 Then Draw 0,A To 323,A
  34. Next 
  35. Ink 2
  36. '
  37. 'Start position
  38. '
  39. X=Rnd(16) : Y=Rnd(9) : VISITED=0
  40. '
  41. Do 
  42.    If VISITED=169 Then Goto SLUTT
  43.    BX=X*19+2 : BY=Y*19+2
  44.    Paste Bob BX,BY,1
  45.    NX=BX : NY=BY
  46.    '
  47.    DI=Rnd(3) : OD=DI : D$=""
  48.    'Build list of exits 
  49.    For T=1 To 4 : P2=2^DI
  50.       If(FLAGS(X,Y) and P2)=P2
  51.          If MAZE(X+DIX(DI),Y+DIY(DI))=0
  52.             D$=D$+Chr$(DI+64)
  53.          End If 
  54.       End If 
  55.       Add DI,1,0 To 3
  56.    Next 
  57.    If D$>""
  58.       'Pick and move 
  59.       DI=Asc(D$)-64 : P2=2^DI : NX=BX+19*DIX(DI) : NY=BY+19*DIY(DI)
  60.       FLYTT
  61.       MAZE(X,Y)=MAZE(X,Y) or P2
  62.       Add X,DIX(DI) : Add Y,DIY(DI)
  63.       DI=(DI+2) and 3
  64.       MAZE(X,Y)=MAZE(X,Y) or(2^DI)
  65.       Inc VISITED
  66.    Else 
  67.       'Scan for used room
  68.       Repeat 
  69.          Wait 2
  70.          Bar BX,BY To BX+15,BY+15
  71.          Add X,1,0 To 16
  72.          If X=0 : Add Y,1,0 To 9 : End If 
  73.          BX=X*19+2 : BY=Y*19+2
  74.          Paste Bob BX,BY,1
  75.       Until MAZE(X,Y)>0
  76.    End If 
  77. Loop 
  78. '
  79. Procedure FLYTT
  80.    Shared BX,BY,NX,NY
  81.    If NX<>BX
  82.       D=(NX-BX) : D=D/Abs(D)
  83.       Repeat : Add BX,D : Paste Bob BX,BY,1 : Wait Vbl : Until BX=NX
  84.    End If 
  85.    If NY<>BY
  86.       D=(NY-BY) : D=D/Abs(D)
  87.       Repeat : Add BY,D : Paste Bob BX,BY,1 : Wait Vbl : Until BY=NY
  88.    End If 
  89. End Proc
  90. SLUTT:
  91. Wait 25
  92. Bar BX,BY To BX+15,BY+15
  93. '
  94. 'Store the maze and go back for another
  95. '
  96. If Exist("bMazes")
  97.    Append 1,"bMazes"
  98. Else 
  99.    Open Out 1,"bMazes"
  100. End If 
  101. For B=0 To 9 : For A=0 To 16
  102.       Print #1,Chr$(MAZE(A,B)+64);
  103. Next : Next 
  104. Print #1,""
  105. Close 
  106. FIRST=False
  107. Pen 0 : Print At(14,24);"Another? y/n";
  108. X$=Inkey$ : X$=""
  109. While X$="" : X$=Lower$(Inkey$) : Wend 
  110. If X$="y" Then Print At(14,24);Space$(12); : Goto GO1
  111. Default 
  112. Print : Centre "Okay then... later!" : Print